package com.yqh.Map;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * Map 集合的常用方法
 *
 * @author 阳秋豪
 * @createTime 2024/3/6
 */
public class Test2 {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        // 1、V put(K key, V value)
        // 描述 -- 将指定值与该集合中的指定键关联，如果指定键在集合中已存在则指定值覆盖旧值
        System.out.println("添加前" + map); // 添加前{}
        map.put("手表", 100);
        map.put("手机", 2);
        map.put("Java", 2);
        map.put(null, null);
        System.out.println("添加后" + map); // 添加后{null=null, 手表=100, Java=2, 手机=2}

        // 2、void putAll(Map<? extends K, ? extends V> m)
        // 描述 -- 将指定集合所有映射复制到此集合（调用方法的集合）中
        Map<String, Integer> map1 = new HashMap<>();
        map1.put("张三", 21);
        map1.put("李四", 22);
        System.out.println("原map1 -- " + map1); // 原map1 -- {李四=22, 张三=21}
        Map<String, Integer> map2 = new HashMap<>();
        map2.put("王五", 21);
        map2.put("赵六", 22);
        System.out.println("原map2 -- " + map2); // 原map2 -- {王五=21, 赵六=22}
        map1.putAll(map2);
        System.out.println("复制后map1 -- " + map1); // 复制后map1 -- {李四=22, 张三=21, 王五=21, 赵六=22}
        System.out.println("复制后map2 -- " + map1); // 复制后map2 -- {李四=22, 张三=21, 王五=21, 赵六=22}

        // 3、V remove(Object key)
        // 描述 -- 删除指定键映射到的值
        // 返回值 -- 指定键映射到的值，指定键不是集合中元素返回 null
        System.out.println("删除前map" + map); // 删除前map{null=null, 手表=100, Java=2, 手机=2}
        System.out.println(map.remove("手机")); // 2
        System.out.println("删除后map" + map); // 删除后map{null=null, 手表=100, Java=2}

        // 4、void clear()
        // 描述 -- 移除集合中的所有映射
        map.clear();
        System.out.println(map); // {}

        // 5、int size()
        // 描述 -- 返回指定集合的键值映射个数
        System.out.println(map.size()); // 0

        // 6、boolean isEmpty()
        // 描述 --  集合中不包含映射关系返回true
        System.out.println(map.isEmpty()); // true

        // 7、V get(Object key)
        // 描述 -- 返回指定键映射到的值，如果此映射不包含该键的映射则返回 null
        map.put("手表", 100);
        map.put("手机", 2);
        System.out.println(map); // {手表=100, 手机=2}
        System.out.println(map.get("手机")); // 2
        System.out.println(map.get("张三")); // null

        // 8、boolean containsKey(Object key)
        // 描述 -- 集合包含指定键返回true 不包含返回false
        System.out.println(map.containsKey("手机")); // true
        System.out.println(map.containsKey("张三")); // false

        // 9、boolean containsValue(Object value)
        // 描述 -- 集合包含指定值返回true 不包含返回false
        System.out.println(map.containsValue(2)); // true
        System.out.println(map.containsValue(20)); // false

        // 10、Set<K> keySet()
        // 描述 -- 获取集合全部键
        System.out.println(map.keySet()); // [手表, 手机]

        // 11、Collection<V> values()
        // 描述 -- 获取集合全部值
        System.out.println(map.values()); // [100, 2]

        // 12、Set<Map.Entry<K, V>> entrySet()
        // 描述 -- 返回指定集合映射的Set视图
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        System.out.println(entries); // 李四=22 张三=21 王五=23 赵六=24

    }
}
